演算法 是一個「逐步、明確且有限的計算規則或步驟」。
舉個例子:
想像一下自己就是一台機器,現在手受傷了要貼 OK 蹦怎麼做?
大家可能會想說,直接從藥箱拿 OK 蹦貼上去不就好了?
沒錯!但如果是演算法的話就不夠詳細了。
而演算法會像是:
輸入: 藥箱。
運作規則:
輸出: 貼好 OK 蹦的手。
對我而言,每一個演算法都是一個小工具。有學習的話,遇到特定問題時,我們就可能找到更高效的解法。
就像打怪時,面對火系 boss 用水系比草系好打;砍樹時,用鋸子比斧頭省力。
如果沒學演算法,解決問題時可能會更費力,也更慢。
分享一句查資料看到的,
For me, great algorithms are the poetry of computation. Just like verse, they can be terse, allusive, dense, and even mysterious. But once unlocked, they cast a brilliant new light on some aspect of computing.
-- Francis Sullivan
但後面還是會講如何客觀判斷演算法好壞的方法 (Big-O 等)。
最後,分享一下為甚麼要參加鐵人賽
我個人把學習本身也當作一種演算法。如果只是單純讀書、看影片,只完成了「輸入」,那其實並不是真正的學習。這次的鐵人賽,希望能完善自己的「學習演算法」:明確定義學習方式,並在這 30 天內完成文章輸出,希望能在這段時間內看到進步並養成良好的學習習慣,成長為大水牛。
而這次的學習路徑預計會從基礎的演算法、資料結構,到後面回偏向使用數學模型來解決問題的線性規劃 (Linear Programming, Lp),以及使 GPU 求解 LP 成為可能的 PDLP (Primal-Dual Linear Programming)。